#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>
#include <cmath>
using namespace std;
int ret=0x3f3f3f3f;
int n;
unordered_set<int> has;
bool check(int x)
{
	if(x<2)
		return false;
	for(int i=2;i<=sqrt(x);i++)
	{
		if(x%i==0)
			return false;
	}
	return true;
}
void add(int x,vector<int>& arr)
{
	for(int i=2;i<=x;i++)
	{
		if(x%i==0 && check(i))
			arr.push_back(i);
	}	
}
void dfs(int pos,int sum,vector<vector<int>>& arr)
{
	if(sum>=ret)
		return;
	if(pos==n && has.size()==n)
	{
		ret=min(ret,sum);
	}
	for(int i=pos;i<n;i++)
	{
		for(int j=0;j<arr[i].size();j++)
		{
			if(has.count(arr[i][j]))
				continue;
			has.insert(arr[i][j]);
			dfs(i+1,sum+arr[i][j],arr);
			has.erase(arr[i][j]);
		}
	}
}

int main()
{
	
	cin>>n;
	vector<vector<int>> arr(n);

	for(int i=0;i<n;i++)
	{
		int t;
		cin>>t;
		add(t,arr[i]);
	}
	dfs(0,0,arr);
	if(ret==0x3f3f3f3f)
		cout<<-1<<endl;
	else
		cout<<ret<<endl;
	
	return 0;
}
